<?php
namespace app\index\controller;

use think\Controller;
use think\Db;
use think\Request;
use org\Verify;
use app\index\model\VisitorModel;

class Login extends Controller{
	/**
	 * [登录操作]
	 */
	public function doLogin(){
        $param = input("post.");
        $verify = new Verify();
        if (!$verify->check($param['code'])) {
            return ['code'=>0,'msg'=>'验证码错误'];
        }
        $visitorModel = new VisitorModel();
        $visitor = $visitorModel->where('user_name',$param['user_name'])
			->whereOr('email',$param['user_name'])->find();
        if(empty($visitor)){
            return ['code'=>0,'msg'=>'该账号不存在'];
        }
        if(md5($param['passwd'] . config('salt')) != $visitor['passwd']){
            return ['code'=>0,'msg'=>'密码错误'];
        }
        if(1 != $visitor['status']){
            return ['code'=>0,'msg'=>'该账号被禁用'];
        }
		session("visitor_id",$visitor['id']);
		session("visitor_user_name",$visitor['user_name']);
		session("visitor_nick_name",$visitor['nick_name']);
		session("visitor_head",$visitor['head']);
        return ['code'=>1,'msg'=>'登录成功'];
    }

	public function logout() {
		session("visitor_id",null);
		session("visitor_user_name",null);
		session("visitor_nick_name",null);
		session("visitor_head",null);
		$this->redirect(url('index/index/index'));

	}

	/**
	 * [验证码]
	 */
	public function checkVerify(){
		$fontttfArr = [2,4,6];
		$fontttf = $fontttfArr[array_rand($fontttfArr,1)].".ttf";
		$verify = new Verify();
		$verify->imageH = 40;
		$verify->imageW = 155;
		$verify->length = 4;
		$verify->useNoise = false;
		$verify->useCurve = true;
		$verify->fontttf = $fontttf;
		$verify->fontSize = 18;
		return $verify->entry();
	}

	/**
	 * [发送邮件]
	 */
	public function sendEmailCode() {
		$param = input("post.");
		$verify = new Verify();
        if (!$verify->check($param['code'])) {
            return ['code'=>0,'msg'=>'验证码错误'];
        }
		$info = DB::name('api_cfg')->where('cate_id',3)->select();
		$config = [];
		foreach($info as $v){
			$config[$v['remark']] = $v['val'];
		}
		$eCode = rand(100000,999999);
		session("check_email_code",$eCode);
		$ct = "您的邮箱验证码为【".$eCode."】，请尽快完成操作。此邮件请勿回复！";
		$res = $this->sendMail($param['email'],'您在Finalove网站申请注册的验证码',$ct,$config);
		if($res){
			return ['code'=>1,'msg'=>'邮件发送成功，请尽快完成操作'];
		}else{
			return ['code'=>0,'msg'=>'邮件发送失败，请稍后再试'];
		}
	}

	/**
	 * [注册]
	 */
	public function VisitorReg() {
		$param = input("post.");
		$visitorModel = new VisitorModel();
		$validate = validate("VisitorValidate");
		$result = $validate->check($param);
		if(!$result){
			return ['code'=>0,'msg'=>$validate->getError()];
		}
		// 验证邮箱验证码
		if($param['email_code'] != session('check_email_code')){
			return ['code'=>0,'msg'=>"邮箱验证码错误"];
		}
		$visitorModel::startTrans();
		try {
			$data = $param;
			$data['passwd'] = md5($param['passwd'] . config('salt'));
			$data['used_passwd'] = $data['passwd'];
			$data['head'] = "/static/admin/images/user.png";
			$visitor_id = $visitorModel::insertGetId($data);
			$visitorModel::where('id',$visitor_id)->update(['nick_name' => '用户'.$visitor_id]);
			session("visitor_id",$visitor_id);
			session("visitor_user_name",$data['user_name']);
			session("visitor_nick_name",'用户'.$visitor_id);
			session("visitor_head",$data['head']);
			// 创建visitor的文件夹
			$dirpath = 'visitor/'.$visitor_id;
			if (!is_dir($dirpath)) {
				mkdir($dirpath, 0777, true);
			}
			$visitorModel::commit();
			session("check_email_code",null);
			return ['code'=>1,'msg'=>"注册成功"];
		} catch (\Exception $e) {
			$visitorModel::rollback();
			return ['code'=>0,'msg'=>"注册失败：".$e->getMessage()];
		}

	}
	/**
	 * 发送邮件方法
	 * @param string $to：接收者邮箱地址
	 * @param string $title：邮件的标题
	 * @param string $content：邮件内容
	 * @return boolean  true:发送成功 false:发送失败
	 */
	public function sendMail($to,$title,$content,$cfg){
	    //实例化PHPMailer核心类
	    $mail = new \PHPMailer\PHPMailer\PHPMailer();
	    //是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式
	    // $mail->SMTPDebug = 1;
	    //使用smtp鉴权方式发送邮件
	    $mail->isSMTP();
	    //smtp需要鉴权 这个必须是true
	    $mail->SMTPAuth=true;
	    //链接qq域名邮箱的服务器地址
	    $mail->Host = $cfg['smtp_server'];
	    //设置使用ssl加密方式登录鉴权
	    $mail->SMTPSecure = $cfg['smtp_check_type'];
	    //设置ssl连接smtp服务器的远程服务器端口号，以前的默认是25，但是现在新的好像已经不可用了 可选465或587
	    $mail->Port = $cfg['smtp_port'];
	    //设置smtp的helo消息头 这个可有可无 内容任意
	    $mail->Helo = 'Finalove';
	    //设置发件人的主机域 可有可无 默认为localhost 内容任意，建议使用你的域名
	    $mail->Hostname = 'localhost';
	    //设置发送的邮件的编码 可选GB2312 我喜欢utf-8 据说utf8在某些客户端收信下会乱码
	    $mail->CharSet = 'UTF-8';
	    //设置发件人姓名（昵称） 任意内容，显示在收件人邮件的发件人邮箱地址前的发件人姓名
	    $mail->FromName = 'Finalove';
	    //smtp登录的账号 这里填入字符串格式的qq号即可
	    $mail->Username = $cfg['smtp_username'];
	    //smtp登录的密码 使用生成的授权码 你的最新的授权码
	    $mail->Password = $cfg['smtp_passwd'];
	    //设置发件人邮箱地址 这里填入上述提到的“发件人邮箱”
	    $mail->From = $cfg['smtp_from'];
	    //邮件正文是否为html编码 注意此处是一个方法 不再是属性 true或false
	    $mail->isHTML(false);
	    //设置收件人邮箱地址 该方法有两个参数 第一个参数为收件人邮箱地址 第二参数为给该地址设置的昵称 不同的邮箱系统会自动进行处理变动 这里第二个参数的意义不大
	    $mail->addAddress($to,'亲爱的用户');
	    //添加多个收件人 则多次调用方法即可
	    // $mail->addAddress('xxx@qq.com','lsgo在线通知');
	    //添加该邮件的主题
	    $mail->Subject = $title;
	    //添加邮件正文 上方将isHTML设置成了true，则可以是完整的html字符串 如：使用file_get_contents函数读取本地的html文件
	    $mail->Body = $content;

	    //为该邮件添加附件 该方法也有两个参数 第一个参数为附件存放的目录（相对目录、或绝对目录均可） 第二参数为在邮件附件中该附件的名称
	    // $mail->addAttachment('./d.jpg','mm.jpg');
	    //同样该方法可以多次调用 上传多个附件
	    // $mail->addAttachment('./Jlib-1.1.0.js','Jlib.js');

	    $status = $mail->send();

	    //简单的判断与提示信息
	    if($status) {
	        return true;
	    }else{
	        return false;
	    }
	}
}
